import * as vsc from 'vscode'

var outputChannel: vsc.OutputChannel

export function log(msg: string) {
  if (!outputChannel) outputChannel = vsc.window.createOutputChannel('中文代码输入')
  outputChannel.appendLine(`[${new Date().toLocaleString()}] ${msg}`)
}

export async function 获得系统补全项(
  uri: vsc.Uri,
  position: vsc.Position,
): Promise<vsc.CompletionList<vsc.CompletionItem>> {
  var 补全项提供器 = await vsc.commands.executeCommand<vsc.CompletionList>(
    'vscode.executeCompletionItemProvider',
    uri,
    position,
  )
  return 补全项提供器
}
export function 获得当前输入字段(): Promise<string> {
  // 我们需要的是文本被编辑后而非编辑前的情况。
  // 为避免意外获得文本被编辑前的情况，加个定时器，确保函数在文本修改后执行。
  // 这样函数就变成了异步的，于是加了Promise。
  return new Promise((res, rej) => {
    setTimeout(() => {
      var 编辑器 = vsc.window.activeTextEditor
      if (!编辑器) return res('')

      var 光标位置 = 编辑器.selections[0].anchor
      var 文件 = 编辑器.document
      var 范围 = 文件.getWordRangeAtPosition(光标位置)

      if (范围 === null) return res('')

      var 当前输入字段 = 文件.getText(范围)
      return res(当前输入字段)
    }, 0)
  })
}

